package //
// This software is now distributed according to
// the Lesser Gnu Public License. Please see
// http://www.gnu.org/copyleft/lesser.txt for
// the details.
// -- Happy Computing!
//
com.stevesoft.pat;

/**
 * A tool that is used to make the \E, \U, \L, and \Q elements of a
 * substitution.
 */
public class StringBufferLike implements BasicStringBufferLike {

	BasicStringBufferLike sbl;

	public StringBufferLike(BasicStringBufferLike sbl) {
		this.sbl = sbl;
	}

	char mode = 'E', altMode = ' ';

	public StringLike toStringLike() {
		return sbl.toStringLike();
	}

	public String toString() {
		return sbl.toString();
	}

	public void append(char c) {
		switch (mode) {
			case 'u':
				mode = altMode;
				altMode = ' ';
			case 'U':
				sbl.append(CaseMgr.toUpperCase(c));
				break;
			case 'l':
				mode = altMode;
				altMode = ' ';
			case 'L':
				sbl.append(CaseMgr.toLowerCase(c));
				break;
			case 'Q':
				if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9'))
					;
				else
					sbl.append('\\');
			default:
				sbl.append(c);
				break;
		}
	}

	public void append(String s) {
		for (int i = 0; i < s.length(); i++)
			append(s.charAt(i));
	}

	public void setMode(char c) {
		if (c == 'u' || c == 'l')
			if (altMode == ' ')
				altMode = mode;
		mode = c;
	}

	public Object unwrap() {
		return sbl.unwrap();
	}
}
